/**
 * 结构体
 * 1 结构体定义，不能在结构体内部定义结构体本身
 * 2 可以在结构体内部定义指向结构体类型的指针变量
 * 3 构造函数可以重载
 * 4 如果重新定义了构造函数，那么默认的构造函数就被覆盖了。
 */
#include <iostream>
#include "../utils/MyUtils.h"
#define struct01 struct01

struct studentInfo{
    int sid;
    char sname[20];
    char gender;
    int age;
    studentInfo* next;//定义指向结构体的指针变量
    studentInfo(){} //默认的空的构造函数
    studentInfo(int _sid):sid(_sid){};//定义构造函数的简洁的形式
    studentInfo(int _sid,int _age):sid(_sid),age(_age){};//定义构造函数的简洁的形式
    studentInfo(int _sid,char _gender){
        sid=_sid;
        gender=_gender;
    };
}tom(1,'F');//定义结构体是就定义了结构体变量

int struct01(){
    studentInfo rose=studentInfo(2,'M');//使用结构体名称定义结构体变量
    studentInfo stu[2]={studentInfo(3,'F'),studentInfo(4,'F')};
    studentInfo *p;

    p=&rose;
    printf("sid=%d,gender=%c\n",p->sid,p->gender);
    for (int i = 0; i < 2; ++i) {
        p=&stu[i];
        printf("sid=%d,gender=%c\n",p->sid,p->gender);
    }
    showLine();
    p=stu;
    printf("sid=%d,gender=%c\n",p->sid,p->gender);

    p++;
    printf("sid=%d,gender=%c\n",p->sid,p->gender);
    return 0;
}

